package com.cqhilink.iot.jobstandardmanagement.dao.mapper;

import com.cqhilink.iot.jobstandardmanagement.facade.model.SingleWorkStep;
import com.cqhilink.iot.jobstandardmanagement.facade.model.WorkCellInstance;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author YuPeng
 * 单项工作步骤Dao层接口
 */
public interface SingleWorkStepMapper {
    /**
     * 删除步骤，硬删除
     * @param stepId
     * @return
     */
    Integer deleteByPrimaryKey(String stepId);

    /**
     * 添加步骤，未加判断
     * @param record
     * @return
     */
    Integer insert(SingleWorkStep record);

    /**
     * 添加步骤，含判断选择性
     * @param record
     * @return
     */
    Integer insertSelective(SingleWorkStep record);

    Integer copySelective(SingleWorkStep record);

    /**
     * 获取步骤详情
     * @param stepId
     * @return
     */
    SingleWorkStep selectByPrimaryKey(String stepId);

    /**
     * 按工作内容查找步骤列表，非分页
     * @param workInstanceId
     * @param version
     * @return
     */
    List<SingleWorkStep> selectByWorkInstanceId(@Param("workInstanceId") String workInstanceId, @Param("version") BigDecimal version);

    /**
     * 判断非空，修改步骤
     * @param record
     * @return
     */
    Integer updateByPrimaryKeySelective(SingleWorkStep record);

    /**
     * 修改步骤，未判断非空
     * @param record
     * @return
     */
    Integer updateByPrimaryKey(SingleWorkStep record);

    /**
     * 批量修改步骤状态为1
     * @param stepList
     * @return
     */
    Integer updateStatusBatch(List<String> stepList);

    /**
     * 单个修改状态为1
     * @param stepId
     * @return
     */
    Integer updateStatus(String stepId);

    /**
     * 按步骤参数进行查询步骤列表，分页
     * @param record
     * @return
     */
    List<SingleWorkStep> selectByStep(SingleWorkStep record);

    /**
     * @param instance
     * @return
     */
    List<SingleWorkStep> queryStepByWorkCellInstanceId(WorkCellInstance instance);

    /**
     * 查询非分页的步骤列表总数量
     * @param record
     * @return
     */
    Integer selectCountByStep(SingleWorkStep record);

    /**
     * 获取工作内容对象
     * @param workInstanceId
     * @return
     */
    WorkCellInstance selectWorkInstanceById(String workInstanceId);

    /**
     * 修改步骤索引
     * @param stepIndex
     * @param stepId
     * @return
     */
    Integer updateIndex(@Param("stepIndex") Integer stepIndex, @Param("stepId") String stepId);

    /**
     * 查询工作内容步骤大于某索引的步骤列表
     * @param index
     * @param workContentId
     * @param version
     * @return
     */
    List<SingleWorkStep> selectByBigThanIndex(@Param("index") int index, @Param("workContentId") String workContentId, @Param("version") BigDecimal version);

    /**
     * 获取步骤列表，非分页
     * @param singleWorkStep
     * @return
     */
    List<SingleWorkStep> selectByStepSelect(SingleWorkStep singleWorkStep);

    /**
     * 修改工作内容的版本号
     * @param workCellInstance
     * @return
     */
    int updateStepVersion(WorkCellInstance workCellInstance);

    /**
     * 获取最新版本号
     * @param workInstanceId
     * @return
     */
    int selectLastVersion(String workInstanceId);

    /**
     * 获取操作单元中大于某索引的步骤列表
     * @return
     */
    List<SingleWorkStep> selectByBigThanIndexByCellId(SingleWorkStep singleWorkStep);


    /**
     * 根据操作单元删除步骤
     */
    Integer delStepByCellId(String cellId);


    /**
     * 删除某个步骤
     * @param singleWorkStep
     * @return
     */
    Integer delStepByStepId(SingleWorkStep singleWorkStep);


    /**
     * 更新cellId
     * @param cellId
     * @return
     */
    int updateCellIdByCellId(String cellId);

    /**
     * 查询单元版本为空的步骤
     * @param cellId
     * @return
     */
    List<SingleWorkStep> queryCellVersion(String cellId);


    /**
     * 查询内容ID
     * @param workContentId
     * @return
     */
    List<SingleWorkStep> queryContentVersion(String workContentId);


    /**
     * 更新版本号
     * @param singleWorkStep
     * @return
     */
    Integer updateWorkCellInfoVersion(SingleWorkStep singleWorkStep);

    /**
     * 删除步骤
     * @param list
     * @return
     */
    int deleteSteps(List<SingleWorkStep> list);

    /**
     * 获取步骤平均耗时
     * @param stepId
     * @return
     */
    int getAvgByStepId(String stepId);

}